TODO list and scratch pad for Structure Synth. /Mikael

About box sizing on Mac.
Change 'mac.pro' -> 'StructureSynth.pro'
Check copy paste menu

Template Render Dialog
----------------------
Save file as:
Default file path: [...............] [Dir...]
File name: [Output0001.es] [File...]

Post processing:
[ ] Run the following command after saving picture.
    [C:\program files\Sunflow\Sunflow.bat {FILENAME}]
   
 Edit script before saving:
[                  ]
[                  ]
[                  ]
[                  ]




On startup -> show 3D view nav info...
Help -> add weblinks...

- Restructure: 
	-GUI files the proper place
	-Check directory structure.
	-Comments
				
- Website: 
    - add section links.
    - tutorials: 'EisenScript Kata'

- Connected polygonal objects.
	
- SpinOff: 2D Version (JavaScript/Canvas) of CFDG where each mouseclicks spawns a new rule

- JanJacobSV has some interesting 3D experiments with CFDG and Virtools. http://www.youtube.com/watch?v=KWgQ8XIPAio
	
- [Collada] Support? (http://www.khronos.org/collada/)

- VRML example (could be fun)







EisenScript
-----------

Structures are specified in EisenScript (named after the russian film director Sergei Eisenstein). 

EisenScript is processed by the Eisenstein Engine by the following steps:
1) Preprocessor (strips comments imports '#include' statements).
2) Tokenizer (divides string input into symbols. The string input is split at any white space (except if it occurs inside quotes).)  
3) Parser (standard recursive descent parser). The parser creates a 'ruleset' from the text input. 
4) Name resolving. Rules contain symbolic references to other rules. These symbols must be resolved.

The EBNF notation for EisenScript looks like this:

program = { set | rule } ;
rule = 'RULE' ,  rule_name , [ weight ] , '{' , { set | action } , '}' ;
action = { transformationloop } [transformationlist] rule_ref ;
transformationloop = number , '*' , transformationlist ;
transformationlist = '{' , { transformation } , '}';
transformation = 'X' , number |                      // translations
                 'Y' , number |
                 'Z' , number |
                 'RX', number |						 // rotation about axis
                 'RY', number |
                 'RZ', number |
                 'S', number |						 // resizing (all axis equal)
                 'S', number number number, 		 // resizing for x,y,z individually
                 
set = 'SET' , var_name , string ;

'rule_ref', 'var_name', and 'string' are text strings with a reasonable set of allowed characters.
Though not strictly a part of the syntax, a few rules are provided as predefined primitives in Structure Synth:

Primitives: 
-----------
box      - solid box
grid	 - wireframe box
sphere   - 
line     - along x axis, centered in y,z plane.
point    - centered in coordinate system.
cylinder - the symmetry axis will be the current x axis.
pbox     - continues box (will be drawn smoothly as the coordinate system transforms).
pcylinder- polygonal cylinder (will be drawn smoothly as the coordinate system transforms).
tube     - (With number of division)

